<?php
namespace zake\foundation\able\stream;

use zake\foundation\able\ProtocolAble;

/**
 * Interface WriteBufferAble
 * @package zaka\foundation\able
 *
 * @author liu.bin 2020-03-27 16:37
 */
interface WriteBufferAble extends WriteAble,WritePointAble
{
    /**
     * 获取准备发送的数据，不刷新写缓冲区
     *
     * @return string
     * @author liu.bin 2020-03-24 16:25
     */
    public function getWriteBuffer();


    /**
     * 将数据写入 bufferStream 的 writeBuffer,并设置写监听
     *
     * @param string $sendData
     * @param null|\Closure $callback
     * @param array $param [encode->true]
     * @return int|false
     *
     * @author liu.bin 2020-03-24 14:56
     */
    public function writeBuffer($buffer,$callback=null,$param=[]);



    /**
     * 读取写缓冲区的数据并刷新缓冲区
     *
     * 如果读取的长度不够，则不会读取，返回空字符串
     *
     * @param int $size 需要读取缓冲区的长度
     * @return string
     * @author liu.bin 2020-03-27 10:26
     */
    public function shiftWriteBuffer($size=0);


    /**
     * 将数据写入缓冲区
     * @param $buffer
     * @return mixed
     *
     * @author liu.bin 2020-04-26 16:35
     */
    public function pushWriteBuffer($buffer);

    /**
     *
     * @return int
     *
     * @author liu.bin 2020-04-03 10:42
     */
    public function getWPos();
}